package br.com.drestranho.escola.dao;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import br.com.drestranho.escola.entity.Cargo;
import br.com.drestranho.escola.entity.Funcionario;
import br.com.drestranho.escola.entity.Turma;

@Stateless
public class FuncionarioDAO {
	@PersistenceContext(unitName="H6Escola")
	private EntityManager em;
	
	public void atualizar(Funcionario bean) {
//		em.refresh(bean); lanca java.lang.IllegalArgumentException: Entity not managed (possível bug)
		em.merge(bean);
	}
	
	public void remover( Funcionario bean) {
		em.remove(em.merge(bean));
	}
	
	public Funcionario getBean(Integer id) {
		Funcionario bean = em.find(Funcionario.class, id);
		return bean;
	}
	
	// metodo usado para validar o login. Retorna um funcionario ou nulo
	public Funcionario pesqBeanNome(String nome, String senha) {
		Query qry = em.createQuery("select f from Funcionario f where f.nome=:nome and f.senha=:senha");
		qry.setParameter("nome", nome);
		qry.setParameter("senha", senha);
		ArrayList<Funcionario> funcs = (ArrayList<Funcionario>)qry.getResultList();
		if (funcs.size() > 0) return funcs.get(0);
		else return null;
	}
	
	public List<Funcionario> getBeans(){//Lista 
		List<Funcionario> beansList = (List<Funcionario>)em.createQuery("select a from Funcionario a").getResultList();
		return beansList;
	}
	
	public List<Funcionario> getProfessores(){//Lista
//		CriteriaBuilder cb = em.getCriteriaBuilder();
//		CriteriaQuery<Funcionario> cq = cb.createQuery(Funcionario.class);
//		Root<Funcionario> from = cq.from(Funcionario.class);
//		CriteriaQuery<Funcionario> select = cq.select(from).where(cb.equal(from.get("cargo"), Cargo.professor));
//		List<Funcionario> professores = em.createQuery(select).getResultList();
		List<Funcionario> professores = (List<Funcionario>)em.createQuery("select f from Funcionario f where f.cargo=:cargo")
				.setParameter("cargo", Cargo.professor).getResultList();
		
		return professores;
	}
	
	public void salvar(Funcionario bean) {
		em.persist(bean);
	}
	
}
